GdkVulkanContext *vulkan;
VkPipelineLayout pipeline_layout;
- VkDescriptorSetLayout descriptor_set_layout;
};
struct _GskVulkanPipelinePrivate
/*** GskVulkanPipelineLayout ***/
GskVulkanPipelineLayout *
-gsk_vulkan_pipeline_layout_new (GdkVulkanContext *context)
+gsk_vulkan_pipeline_layout_new (GdkVulkanContext *context,
+ VkDescriptorSetLayout *descriptor_set_layout)
{
GskVulkanPipelineLayout *self;
VkDevice device;
device = gdk_vulkan_context_get_device (context);
- GSK_VK_CHECK (vkCreateDescriptorSetLayout, device,
- &(VkDescriptorSetLayoutCreateInfo) {
- .sType = VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_CREATE_INFO,
- .bindingCount = 1,
- .pBindings = (VkDescriptorSetLayoutBinding[1]) {
- {
- .binding = 0,
- .descriptorType = VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER,
- .descriptorCount = 1,
- .stageFlags = VK_SHADER_STAGE_FRAGMENT_BIT
- }
- }
- },
- NULL,
- &self->descriptor_set_layout);
-
GSK_VK_CHECK (vkCreatePipelineLayout, device,
&(VkPipelineLayoutCreateInfo) {
.sType = VK_STRUCTURE_TYPE_PIPELINE_LAYOUT_CREATE_INFO,
.setLayoutCount = 1,
- .pSetLayouts = &self->descriptor_set_layout,
+ .pSetLayouts = descriptor_set_layout,
.pushConstantRangeCount = gst_vulkan_push_constants_get_range_count (),
.pPushConstantRanges = gst_vulkan_push_constants_get_ranges ()
},
self->pipeline_layout,
NULL);
- vkDestroyDescriptorSetLayout (device,
- self->descriptor_set_layout,
- NULL);
-
g_slice_free (GskVulkanPipelineLayout, self);
}
{
return self->pipeline_layout;
}
-
-VkDescriptorSetLayout
-gsk_vulkan_pipeline_layout_get_descriptor_set_layout (GskVulkanPipelineLayout *self)
-{
- return self->descriptor_set_layout;
-}
-
#define GSK_VK_CHECK(func, ...) gsk_vulkan_handle_result (func (__VA_ARGS__), G_STRINGIFY (func))
-GskVulkanPipelineLayout * gsk_vulkan_pipeline_layout_new (GdkVulkanContext *context);
+GskVulkanPipelineLayout * gsk_vulkan_pipeline_layout_new (GdkVulkanContext *context,
+ VkDescriptorSetLayout *descriptor_set_layout);
GskVulkanPipelineLayout * gsk_vulkan_pipeline_layout_ref (GskVulkanPipelineLayout *self);
void gsk_vulkan_pipeline_layout_unref (GskVulkanPipelineLayout *self);
VkPipelineLayout gsk_vulkan_pipeline_layout_get_pipeline_layout
(GskVulkanPipelineLayout *self);
-VkDescriptorSetLayout gsk_vulkan_pipeline_layout_get_descriptor_set_layout
- (GskVulkanPipelineLayout *self);
-
GskVulkanPipeline * gsk_vulkan_pipeline_new (GType pipeline_type,
GskVulkanPipelineLayout *layout,
GskVulkanCommandPool *command_pool;
VkFence fence;
VkRenderPass render_pass;
+ VkDescriptorSetLayout descriptor_set_layout;
GskVulkanPipelineLayout *layout;
GskVulkanUploader *uploader;
GskVulkanBuffer *vertex_buffer;
NULL,
&self->render_pass);
- self->layout = gsk_vulkan_pipeline_layout_new (self->vulkan);
+ GSK_VK_CHECK (vkCreateDescriptorSetLayout, device,
+ &(VkDescriptorSetLayoutCreateInfo) {
+ .sType = VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_CREATE_INFO,
+ .bindingCount = 1,
+ .pBindings = (VkDescriptorSetLayoutBinding[1]) {
+ {
+ .binding = 0,
+ .descriptorType = VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER,
+ .descriptorCount = 1,
+ .stageFlags = VK_SHADER_STAGE_FRAGMENT_BIT
+ }
+ }
+ },
+ NULL,
+ &self->descriptor_set_layout);
+
+
+ self->layout = gsk_vulkan_pipeline_layout_new (self->vulkan, &self->descriptor_set_layout);
self->uploader = gsk_vulkan_uploader_new (self->vulkan, self->command_pool);
VkDescriptorSetLayout *layouts = g_newa (VkDescriptorSetLayout, needed_sets);
for (i = 0; i < needed_sets; i++)
- {
- layouts[i] = gsk_vulkan_pipeline_layout_get_descriptor_set_layout (self->layout);
- }
+ layouts[i] = self->descriptor_set_layout;
GSK_VK_CHECK (vkAllocateDescriptorSets, device,
&(VkDescriptorSetAllocateInfo) {
g_free (self->descriptor_sets);
g_hash_table_unref (self->descriptor_set_indexes);
+ vkDestroyDescriptorSetLayout (device,
+ self->descriptor_set_layout,
+ NULL);
+
vkDestroyFence (device,
self->fence,
NULL);